// 权限控制文件
// 路由全局前置守卫
// 导入路由实例
import router from '@/router'
// 导入store实例
import store from '@/store'
// 导入进度条提示
import NProgress from 'nprogress'
// 导入进度条样式
import 'nprogress/nprogress.css'
// 白名单
const whiteList = ['/login', '/404']

// 注册路由全局守卫的钩子
router.beforeEach(async(to, from, next) => {
  // 开启进度条加载提示
  NProgress.start()
  // 从vuex中获取token
  const token = store.state.user.token
  if (token) { // 登录了
    if (whiteList.includes(to.path)) { // 如果登录了还要去白名单里的地方跳转到首页
      next('/')
      NProgress.done()
    } else {
      // 获取用户信息的action在这里调用
      // 此项目的核心就是权限控制，就是不同用户进来左侧菜单不同
      // 如果用户点击进来再去获取用户角色权限信息就太晚了
      if (!store.state.user.userInfo.companyId) { // 不能路由一跳转就发请求，有数据了就不用发请求了
        await store.dispatch('user/getUserInfoAction')
      }
      next()
    }
  } else { // 未登录
    if (whiteList.includes(to.path)) { // 要去的地方在白名单中放行
      next()
    } else { // 否则跳转到首页，并携带要去的路径在参数中
      next(`/login?redirectUrl=${to.path}`)
      NProgress.done()
    }
  }
})

router.afterEach((to, from) => {
  // 关闭进度条
  NProgress.done()
})
